Embedded systems are used in a variety of today's electro-mechanical systems. These systems are often configured to perform one or more specialized tasks associated with the system in which they are deployed. In many cases, these embedded systems perform operational and control functions associated with a larger system, functioning as the “brain” of the system. For example, an embedded system may include an electronic control unit (ECU) programmed to monitor and/or control particular aspects and/or operations associated with the system in which it operates. Embedded systems are often highly specialized and critical to the performance of the systems in which they are deployed.
In order to minimize development and manufacturing costs, generic electronic control units (ECUs) were developed that are compatible with a variety of different systems. Once deployed in a system, these generic ECUs may be customized using processor-executable embedded software loaded into a memory device associated with the ECU. This embedded software may contain instructions for controlling virtually every operation associated with the system. By customizing operations of each embedded system at the software level, the same ECU hardware may be employed in variety of applications, allowing for mass-production of the generic hardware. Further, because the functionality of the system is defined almost exclusively in software, updates, modifications, and upgrades may be made to the system without necessitating replacement of the system hardware, thereby reducing repair and upgrade costs.
Because software for embedded systems may define virtually all functional aspects associated with the system, the design of software for these systems may be complicated, time intensive, and require highly specialized knowledge of software development techniques. Embedded software associated with an engine controller may comprise hundreds of thousands of lines of code and total embedded software on machines can be millions of lines of code.
One system for simplifying the design of control software for these types of generic hardware systems is described in U.S. Patent Application Publication No. 2004/0044990 (“the '990 publication”) to Schloegel et al. The '990 publication describes a software design tool that provides a graphical interface that allows users to arrange graphical modeling entities. Code generators are attached to the modeling entities and these modeling entities are traversed to generate software for the system. With this model-based development, a system model can be used through the phases of development, including concept design, analysis and simulation, automatic code generation, and testing. Significant benefits are possible using a graphical design interface and single design representation throughout development.
Model-based notations, methodologies, and tools are advancing in capabilities. Modeling notations include, for example, function block diagram and Unified Modeling Language (UML)™. Several tools support model-based development with these notations. Both of these notations support hierarchical composition. New design entities can be implemented by composition of other design entities to multiple levels. Hierarchical composition is also supported by all traditional software programming languages. Software programming languages provide multiple means to support hierarchical composition including, for example, nested source files, function calls, data composition by reference, data composition by containment, and macro definitions. All of these support multiple levels of composition. UML was developed to model software designs and supports most of these means of composition. Function block notation was not designed to model software and only supports one primary means of hierarchical composition; blocks may be implemented as compositions of other blocks. Some tools provide various mechanisms to partition a model into libraries of blocks, palettes of blocks, and/or files and file paths for storage of blocks but these are not generally independent of the block hierarchy.
Hierarchical composition is advantageous for several facets of embedded software: composition of behavior and data, composition of the physical system, and composition of products. These are related but are driven by different goals. Composition of behavior and data decomposes a system into manageable pieces with loose coupling and high internal cohesion. It supports reuse of software from a perspective of shared logic and data design. Physical composition represents constraints from the physical design of the system. Product composition reflects the needs of the product market including product families, product options, product variants, product customization, product growth path, time-to-market, and numerous other factors.
Currently, model-based development tools employing function block notations are more mature and often better suited to development of some embedded control systems. These provide the advantages of model-based development but lack the multiple means of composition of traditional software development languages. These tools are typically less capable of supporting the differing goals of composition. Less reuse is possible in product lines and through changes in physical design.
The presently disclosed system and method for hierarchical hardware mapping for software design are directed toward overcoming one or more of the problems set forth above.